import type { AxiosResponse } from 'axios'
import type { Res } from '/@/tool/Res'
import type { Param } from '/@/tool/Param'
import type { CoreTree } from '/@/tool/CoreTree'

import coreAxios from '/@/tool/coreAxios'

import type { ProjectModule } from '/@/model/cn/core/coding/eo/ProjectModule'

import type { DbTablesInfoVO } from '/@/model/cn/core/coding/vo/DbTablesInfoVO'

import type { DbTableConf } from '/@/model/cn/core/coding/eo/DbTableConf'

const url: string = 'coding/coding'

/**
 * 生成代码 REST API
 */
export default {
  /**
   * 动态添加当前账号对应项目模块的数据源
   * param 参数
   */
  addDataSource(param: Param<ProjectModule>): Promise<AxiosResponse<Res<ProjectModule>>> {
    return coreAxios.post<Res<ProjectModule>>(`${url}/addDataSource`, param)
  },
  /**
   * 获取数据库所有表信息
   * param 参数
   */
  getDbAllTablesInfo(param: Param<ProjectModule>): Promise<AxiosResponse<Res<DbTablesInfoVO>>> {
    return coreAxios.post<Res<DbTablesInfoVO>>(`${url}/getDbAllTablesInfo`, param)
  },
  /**
   * 数据库表配置 >>> 批量保存或修改
   * param 参数
   */
  batchSaveOrUpdateDbTablesConf(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/batchSaveOrUpdateDbTablesConf`, param)
  },
  /**
   * 获取项目模块数据库表配置树
   * param 参数
   */
  getProjectModuleDbTableConfTreeData(param: Param<ProjectModule>): Promise<AxiosResponse<Res<CoreTree<any>>>> {
    return coreAxios.post<Res<CoreTree<any>>>(`${url}/getProjectModuleDbTableConfTreeData`, param)
  },
  /**
   * 生成项目模块
   * param 参数
   */
  generateProjectModule(param: Param<ProjectModule>): Promise<AxiosResponse<Res<ProjectModule>>> {
    return coreAxios.post<Res<ProjectModule>>(`${url}/generateProjectModule`, param)
  },
  /**
   * 生成代码 >>> pro
   * param 参数
   */
  generate(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/generate`, param)
  },
  /**
   * 删除代码文件 >>> pro
   * param 参数
   */
  delProCodeFiles(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/delProCodeFiles`, param)
  },
  /**
   * 重新生成代码 >>> pro
   * param 参数
   */
  regenerate(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/regenerate`, param)
  },
  /**
   * 生成代码 >>> vue
   * param 参数
   */
  generateVue(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/generateVue`, param)
  },
  /**
   * 删除代码文件 >>> vue
   * param 参数
   */
  delVueCodeFiles(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/delVueCodeFiles`, param)
  },
  /**
   * 重新生成代码 >>> vue
   * param 参数
   */
  regenerateVue(param: Param<DbTableConf>): Promise<AxiosResponse<Res<DbTableConf>>> {
    return coreAxios.post<Res<DbTableConf>>(`${url}/regenerateVue`, param)
  },
}
